home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / ABERMUD.ZIP / KEY.C < prev    next >
C/C++ Source or Header  |  1989-07-08  |  1KB  |  80 lines

  1. /*  Key drivers */
  2.  
  3. #include <stdio.h>
  4. #include <sgtty.h>
  5.  
  6. long save_flag= -1;
  7.  
  8. keysetup()
  9. {
  10.     struct sgttyb x;
  11.     gtty(fileno(stdin),&x);
  12.     save_flag=x.sg_flags;
  13.     x.sg_flags&=~ECHO;
  14.     x.sg_flags|=CBREAK;
  15.     stty(fileno(stdin),&x);
  16. }
  17.  
  18. keysetback()
  19. {
  20.     struct sgttyb x;
  21.     if(save_flag== -1) return;
  22.     gtty(fileno(stdin),&x);
  23.     x.sg_flags=save_flag;
  24.     stty(fileno(stdin),&x);
  25. }
  26.  
  27. char key_buff[256];
  28. char pr_bf[32];
  29. long key_mode= -1;
  30.  
  31. key_input(ppt,len_max)
  32. char *ppt;
  33. int len_max;
  34. {
  35.    char x;
  36.    extern long pr_due;
  37.    int len_cur=0;
  38.    key_mode=0;
  39.    strcpy(pr_bf,ppt);
  40.    bprintf("%s",ppt);
  41.    pbfr();
  42.    pr_due=0;
  43.    strcpy(key_buff,"");
  44.    while(len_cur<len_max)
  45.    {
  46.        x=getchar();
  47.        if(x=='\n')
  48.        {
  49.            printf("\n");
  50.            key_mode= -1;
  51.             return;
  52.        }
  53.        if(((x==8)||(x==127))&&(len_cur))
  54.     {
  55.         putchar(8);
  56.         putchar(' ');
  57.         putchar(8);
  58.         len_cur--;
  59.         key_buff[len_cur]=0;
  60.         continue;
  61.     }
  62.     if(x<32) continue;
  63.     if(x==127) continue;
  64.     putchar(x);
  65.     key_buff[len_cur++]=x;
  66.     key_buff[len_cur]=0;
  67.      }
  68. }    
  69.  
  70. key_reprint()
  71. {
  72. extern long pr_due;
  73. extern long pr_qcr;
  74. pr_qcr=1;
  75. pbfr();
  76. if((key_mode==0)&&(pr_due))printf("\n%s%s",pr_bf,key_buff);
  77. pr_due=0;
  78. fflush(stdout);
  79. }
  80.